/*
等号=
左边是变量
右边都应该是值

item.className = i % 2 === 0 ? 'c1' : 'c2';

匿名函数：函数表达式（把函数当做一个值赋值给变量或则其它内容）↓
oDiv.onclick = function(){}; // <=> oDiv.onclick = aaafff000
*/



/*
    变量提升只会提升等号左边的，右边是值不会提前声明。
*/
// console.log(fn);//undefined
// var fn = function () {
//
// };
// console.log(fn);// [Function: fn] ->函数本体 //谷歌浏览器中用小f 表示一个function

// sum(); //报错 Uncaught TypeError：sum is not a function
// var sum = function(){}


/*
↑
真实项目中，应用这个原理，我们创建函数的时候可以使用函数表达式的方式。

为了在项目中使代码更加严谨，我们一般都通过函数表达式的方式来定义一个函数（先定义后执行）

因为：

1. 只能对等号左边的进行提升，所以变量提升完成后，当前函数只是声明了，没有定义，想要执行函数只能放在赋值的代码之后（放在前面执行相当于让undefined执行，会报错的）
2. 这样让我们的代码逻辑更加严谨，以后想要知道一个执行的函数做了什么功能，只需要向上查找定义的部分即可（不会存在定义的代码在执行下面的情况）
*/

//如果加了名字 只有在函数私有作用域中有用
var fn = function sum() {
    console.log(sum);// [Function: sum] ->函数本身
    console.log(1);
    console.log(arguments.callee);// [Function: sum] ->函数本身
};
// sum(); //Uncaught TypeError：sum is not a function

fn();